One major benefit of many communication networks is the ability to facilitate access by many hundreds or thousands of machines to data resources, such as files, stored in servers of the network. Many of these resources, such as HyperText Transfer Protocol (HTTP) resources, may be relatively or extremely large in size, such as hundreds of megabytes or more. Such resources may be, for example, video files, audio files, still image files, and so on.
Generally, data resources available on a network are requested and transmitted in their entirety. However, under many scenarios, a device may require only a portion of a resource to perform some meaningful function. For example, an application executing on a device may request only a portion of a large image to display to a user. To satisfy such a request, some devices may download an entire resource from a resource server, such as an HTTP server, after which the device may then service random access requests from the application executing on the device. Using such a mechanism, however, the entire data resource or file may be downloaded from the server prior to allowing access to the data, possibly resulting in a significant time delay before any data is available to the application.
In other examples, a requesting device may issue HTTP Range Requests to a server, which services those requests to provide portions of the data resource directly to the requesting device. However, the requesting device may need to issue multiple such requests to obtain the desired portion of the data resource. In many cases, these multiple requests, with their associated network delays, roundtrip transmission times, and so on, may require more overall time than a single transmission of the entire data resource to the requesting device.